package com.songtech.auth.user.service;

import java.util.List;

import com.github.pagehelper.PageInfo;
import com.songtech.auth.role.model.Role;
import com.songtech.auth.user.model.User;

public interface UserService {
	/**
	 * 新增用户
	 * @param user
	 * @return
	 * -2:已经存在相同登录名的用户
	 * -1：用户密码为空，
	 * 0:用户登录名为空，
	 * 1：新增成功
	 */
	public int addUser(User user);
	/**
	 * 通过ID或者登录名修改用户信息，只修改有值传入的字段
	 * @param user
	 * @return
	 * -2:用户登录名不能修改
	 * -1：没有查询到对应用户信息，
	 * 0:用户ID和登录名同时为空，
	 * 1：修改成功
	 */
	public int updateUser(User user);
	/**
	 * 通过ID修改用户信息，将信息全部改为传入的值，如果传入值为空，则数据将被置空
	 * 不修改密码字段
	 * @param user
	 * @return
	 * -2:用户登录名不能修改
	 * -1：没有查询到对应用户信息，
	 * 0:用户ID为空，
	 * 1：修改成功
	 */
	public int updateUserById(User user);
	/**
	 * 利用ID、登录名(不能同时为空)&是否有效精确查询用户信息
	 * @param user
	 * @return
	 */
	public User queryUser(User user);
	/**
	 * 利用ID,登录名,用户姓名(模糊),是否有效、查询用户信息
	 * @param user
	 * @return
	 */
	public List<User> queryUserList(User user);
	/**
	 * 通过ID查询用户信息
	 * @param userId
	 * @return
	 */
	public User queryUserById(String userId);
	/**
	 * 查询所有用户信息
	 * @param user
	 * @return
	 */
	public PageInfo<User> getAll(User user,int pageNum, int pageSize);
	/**
	 * 查询所有有效用户的信息
	 * @param user
	 * @return
	 */
	public List<User> getAllUser();
	/**
	 * 通过ID逻辑删除用户
	 * @param userId
	 * @return
	 */
	public int delete(String userId);
	/**
	 * 通过ID启用用户
	 * @param userId
	 * @return
	 */
	public int enabledUser(String userId);
	/**
	 * 通过ID停用用户
	 * @param userId
	 * @return
	 */
	public int disabledUser(String userId);
	/**
	 * 通过登录名修改密码
	 * @param loginName 登录名
	 * @param oldPassword 原来的密码
	 * @param newPassword 新密码
	 * @return
	 * -1：没有查询到对应用户信息，
	 * 0:原密码不正确，
	 * 1：修改成功
	 */
	public int updatePassword(String loginName,String oldPassword, String newPassword);
	
	/**
	 * 根据用户登录名查询用户
	 * @param userName
	 * @return
	 */
	User queryUserByName(String userName);
	/**
	 * 根据用户登录名查询拥有的所有角色
	 * @param id
	 * @return
	 */
	public List<Role> getUserRoles(String loginName);
}
